package com.armed.ejb.sessions;

import com.armed.ejb.entities.Instituciones;
import com.armed.ejb.transference.Institucion;
import com.armed.ejb.transference.helpers.DataReverseTransferHelper;
import com.armed.ejb.transference.helpers.DataTransferHelper;
import com.armed.excepciones.ArmedException;
import com.armed.excepciones.instituciones.InstitucionAsociadaAVentaException;
import com.armed.excepciones.instituciones.InstitucionRepetidaException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;

/**
 * Class InstitucionesFacade
 *
 *
 * @author init() software
 * @version 24/02/2008 
 */
@Stateless
public class InstitucionesFacade implements InstitucionesFacadeRemote
{

    @PersistenceContext
    private EntityManager em;

    /** Constructor of InstitucionesFacade */
    public InstitucionesFacade()
    {
    }

    public void create(Institucion instituciones) throws InstitucionRepetidaException
    {
        Instituciones ins = DataReverseTransferHelper.revertInstitution(instituciones);
        try
        {
            em.persist(ins);
            em.flush();
        }
        catch (PersistenceException e)
        {
            if (e.getCause().getCause() instanceof SQLIntegrityConstraintViolationException)
                throw new InstitucionRepetidaException(instituciones);
            else
                throw e;
        }
    }

    public void edit(Institucion instituciones) throws InstitucionRepetidaException
    {
        try
        {
            em.merge(DataReverseTransferHelper.revertInstitution(instituciones));
            em.flush();
        }
        catch (PersistenceException e)
        {
            if (e.getCause().getCause() instanceof SQLIntegrityConstraintViolationException)
                throw new InstitucionRepetidaException(instituciones);
            else
                throw e;
        }
    }

    public void remove(Institucion instituciones) throws ArmedException
    {
        try
        {
            em.remove(em.merge(DataReverseTransferHelper.revertInstitution(instituciones)));
            em.flush();
        }
        catch (PersistenceException e)
        {
            if (e.getCause().getCause() instanceof SQLIntegrityConstraintViolationException)
                throw new InstitucionAsociadaAVentaException(instituciones);
            else
                throw e;
        }
    }

    public Institucion find(Object id)
    {
        Institucion i = null;
        i = DataTransferHelper.copyInstitution(em.find(com.armed.ejb.entities.Instituciones.class, id));
        return i;
    }

    public List<Institucion> findAll()
    {
        return DataTransferHelper.copyInstitutionsToList(em.createQuery("select object(o) from Instituciones as o").getResultList());
    }
}
